package cn.dxs.adt.activity;

import android.os.Build;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.appcompat.widget.SwitchCompat;
import androidx.appcompat.widget.Toolbar;

import butterknife.BindView;
import cn.dxs.adt.R;
import cn.dxs.adt.service.FloatingViewService;
import cn.dxs.adt.service.WindowChangeDetectingService;
import cn.dxs.adt.utils.ActivityUtil;
import cn.dxs.adt.utils.DialogUtil;
import cn.dxs.adt.utils.PermissionUtil;

public class CurrentActivity extends BaseActivity implements View.OnClickListener {

    private static final String TAG = CurrentActivity.class.getSimpleName();


    @BindView(R.id.toolbar)
    Toolbar toolbar;
    private LinearLayout mLl_switch; // 打开/关闭悬浮窗（根布局）
    private TextView mTv_switch; // 打开/关闭悬浮窗（提示文本）

    private TextView mTv_hint; // 权限提示

    private LinearLayout mLl_overlay; // 悬浮窗权限提示（根布局）
    private TextView mTv_overlay; // 悬浮窗权限（提示文本）
    private SwitchCompat mSc_overlay; // 悬浮窗权限（开关按钮）

    private LinearLayout mLl_notify; // 通知栏权限提示（根布局）
    private TextView mTv_notify; // 通知栏权限（提示文本）
    private SwitchCompat mSc_notify; // 通知栏权限（开关按钮）

    private TextView mTv_close; // 关闭辅助服务按钮

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_current);
        initToolBar(toolbar, true, getTitle());
        init();
    }

    private void init() {
        initView();
        initData();
    }

    private void initView() {
        mLl_switch = findViewById(R.id.ll_switch);
        mTv_switch = findViewById(R.id.tv_switch);
        mTv_hint = findViewById(R.id.tv_hint);
        mLl_overlay = findViewById(R.id.ll_overlay);
        mTv_overlay = findViewById(R.id.tv_overlay);
        mSc_overlay = findViewById(R.id.sc_overlay);
        mLl_notify = findViewById(R.id.ll_notify);
        mTv_notify = findViewById(R.id.tv_notify);
        mSc_notify = findViewById(R.id.sc_notify);
        mTv_close = findViewById(R.id.tv_close);

        mLl_switch.setOnClickListener(this);// "显示/关闭悬浮窗"点击监听
        mSc_overlay.setOnClickListener(this);// "悬浮窗权限"点击监听
        mSc_notify.setOnClickListener(this);// "通知栏权限"点击监听
        mTv_close.setOnClickListener(this);// "关闭辅助服务"点击监听
    }

    private void initData() {
        // 检查是否有悬浮窗权限，没有给出弹框提醒
        if (!PermissionUtil.hasOverlayPermission(this)) {
            DialogUtil.showOverlayAlertDialog(this);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        updateUI();
    }

    /**
     * 更新界面UI
     */
    public void updateUI() {
        // 设置"打开/关闭悬浮窗"提示
        mTv_switch.setText(FloatingViewService.getFloatingViewShowState() ? R.string.string_service_close : R.string.string_service_start);
        // 设置"悬浮窗权限"显示样式（6.0以下默认不需要请求该权限）
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            mLl_overlay.setVisibility(View.GONE);
        } else {
            mLl_overlay.setVisibility(View.VISIBLE);
            boolean overlay = PermissionUtil.hasOverlayPermission(this);
            mTv_overlay.setText(Html.fromHtml(getString(overlay ? R.string.string_service_overlay_tip2 : R.string.string_service_overlay_tip1)));
            mSc_overlay.setChecked(overlay);
        }
        // 设置"通知权限"显示样式（4.4以下默认不需要请求该权限）
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            mLl_notify.setVisibility(View.GONE);
            mTv_hint.setVisibility(View.GONE);
        } else {
            mLl_notify.setVisibility(View.VISIBLE);
            boolean notify = PermissionUtil.hasNotifyPermission(this);
            mTv_notify.setText(Html.fromHtml(getString(notify ? R.string.string_service_notify_tip2 : R.string.string_service_notify_tip1)));
            mSc_notify.setChecked(notify);
        }
        // 设置"关闭辅助服务按钮"的显示和隐藏
        if (PermissionUtil.getServiceState(this, WindowChangeDetectingService.SERVICE_NAME)){
            mTv_close.setVisibility(View.VISIBLE);
        } else {
            mTv_close.setVisibility(View.GONE);
        }
    }

    /**
     * 显示/隐藏窗口视图
     */
    private void switchWindow() {
        // 检查是否有悬浮窗权限，没有给出弹框提醒
        if (!PermissionUtil.hasOverlayPermission(this)) {
            DialogUtil.showOverlayAlertDialog(this);
            return;
        }
        // 检查用户是否已授权开启"辅助功能"
        if (!PermissionUtil.getServiceState(this, WindowChangeDetectingService.SERVICE_NAME)) {
            DialogUtil.showAccessibilityServiceAlertDialog(this, "【打开悬浮窗】需要去【辅助功能】开启", "取消", "去开启");
            return;
        }
        // 切换视图显示状态
        FloatingViewService.switchFloatingView();
        updateUI();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.ll_switch:// "显示/关闭悬浮窗"点击监听
                switchWindow();
                break;

            case R.id.sc_overlay:// "悬浮窗权限"点击监听
                ActivityUtil.turnToOverlayPermission(this);
                break;

            case R.id.sc_notify:// "通知栏权限"点击监听
                ActivityUtil.turnToNotifyPermission(this);
                break;

            case R.id.tv_close:// "关闭辅助服务"点击监听
                ActivityUtil.toAuthAccessibilityService(this);
                break;
        }
    }
}